package estructuras.common;

import java.util.*;


public class Almacen extends EspacioQueAlmacena{
	String nombre;
	Continente continente;
	//destino - paquetes
	HashMap<Almacen, ArrayList<Paquete> > paquetes = new HashMap<>();
	//destino - vuelos
	HashMap<Almacen, Vector<Vuelo> > vuelos = new HashMap<>();
	
	public Almacen(String nombre, Continente continente){
		this.nombre = nombre;
		this.continente = continente;
	}
	
	public List<Paquete> getPaquetesOriginadosEnAlmacenHacia(Almacen destino) {
		if(!paquetes.containsKey(destino)) return new ArrayList<Paquete>();
		else return paquetes.get(destino);
	}
	
	public void addPaqueteOriginadoEnAlmacen(Paquete paq){
		if(!paquetes.containsKey(paq.destino)) paquetes.put(paq.destino, new ArrayList<Paquete>());
		paquetes.get(paq.destino).add(paq);
	}

	public String getNombre() {
		return nombre;
	}

	public Continente getContinente() {
		return continente;
	}
	
	public Vector<Vuelo> getVuelosEnIntervaloDeTiempo(Almacen destino, Fecha fechaInicio, Fecha fechaFin){
		Vuelo fakeInicio = new Vuelo(fechaInicio, null);
		Vuelo fakeFin = new Vuelo(fechaFin, null);
		Vector< Vuelo > vuelos_dest = vuelos.get( destino );
		if( vuelos_dest == null ) return new Vector< Vuelo >();
		Vector< Vuelo > ans = new Vector<>();
		for( Vuelo v : vuelos_dest ) {
			Fecha salida = v.getFechaSalida() , llegada = v.getFechaLlegada();
			if( v.getFechaSalida().compareTo( fechaInicio ) >=0 &&
				v.getFechaLlegada().compareTo( fechaFin ) <= 0 ){
				ans.add( v );
			}
		}
		return ans;
	}
	public void addVuelo(Vuelo vuelo){
		if(!vuelos.containsKey(vuelo.getConexion().getDestino())) vuelos.put(vuelo.getConexion().getDestino(), new Vector<Vuelo>());
		vuelos.get(vuelo.getConexion().getDestino()).add(vuelo);
	}
}
